#ifndef __MCD_RENDERADV_DX11_DX11FIXEDFUNCTIONPIPELINE__
#define __MCD_RENDERADV_DX11_DX11FIXEDFUNCTIONPIPELINE__

#include "../ShareLib.h"
#include "Dx11IncludeFwd.h"

#include "../../../MCD/Core/Math/Vec2.h"
#include "../../../MCD/Core/Math/Vec3.h"
#include "../../../MCD/Core/Math/Vec4.h"

namespace MCD
{
	/*! Dx11FixedFunctionPipeline is primarily used for drawing
		simple shaded geometry such as visualizations.

		\NOTE construct Dx11FixedFunctionPipeline only if a Dx11Window is created.
	*/
	class MCD_RENDERADV_API Dx11FixedFunctionPipeline
	{
	public:
		struct Vertex
		{
			Vec3f position;
			Vec2f uv;
			Vec4f color;
		};

		Dx11FixedFunctionPipeline();
		~Dx11FixedFunctionPipeline();

		void begin();

		void drawTriangleList(sal_notnull const Vertex* vertices, size_t vertexCnt);

		void drawLineList(sal_notnull const Vertex* vertices, size_t vertexCnt);

		void drawPointList(sal_notnull const Vertex* vertices, size_t vertexCnt);

		void drawTriangleListIndexed(
			sal_notnull const Vertex* vertices, size_t vertexCnt,
			sal_notnull uint32_t* indices, size_t indexCnt
			);

		void drawLineListIndexed(
			sal_notnull const Vertex* vertices, size_t vertexCnt,
			sal_notnull uint32_t* indices, size_t indexCnt
			);

		void drawPointListIndexed(
			sal_notnull const Vertex* vertices, size_t vertexCnt,
			sal_notnull uint32_t* indices, size_t indexCnt
			);

		void end();

	private:
		class Impl;
		Impl* mImpl;

	};	// Dx11FixedFunctionPipeline

}	// namespace MCD

#endif	// __MCD_RENDERADV_DX11_DX11FIXEDFUNCTIONPIPELINE__